package com.caiyigo.baihua.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;
import org.apache.log4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.caiyigo.baihua.dto.CjBean;
import com.caiyigo.baihua.dto.KaoshicjDto;
import com.caiyigo.baihua.dto.Result;
import com.caiyigo.baihua.model.Kaoshizw;
import com.caiyigo.baihua.service.KaoshicjService;
import com.caiyigo.baihua.service.KaoshizwService;
import com.caiyigo.baihua.sms.HttpClientHelper;

@Controller
@RequestMapping(value = "/business/sms")
public class SmsController {
	@Autowired
	KaoshizwService kaoshizwService;
	@Autowired
	KaoshicjService kaoshicjService;

	/**
	 * 短信接口二，触发类模板短信接口，可以设置动态参数变量。适合：验证码、订单短信等。
	 */
	@RequestMapping(value = "/zw", method = { RequestMethod.GET,
			RequestMethod.POST })
	public @ResponseBody
	Result sms_api2(String pici) {
		if (StringUtils.isNoneBlank(pici)) {
			pici = pici.trim();
		}else {
			return new Result(false, "批次不能为空");
		}
		Map<String, String> para = new HashMap<String, String>();

		/**
		 * 目标手机号码，多个以“,”分隔，一次性调用最多100个号码，示例：139********,138********
		 */

		/**
		 * 微米账号的接口UID
		 */
		para.put("uid", "t8LomflOl5TU");

		/**
		 * 微米账号的接口密码
		 */
		para.put("pas", "ve5wj3k9");

		/**
		 * 接口返回类型：json、xml、txt。默认值为txt
		 */
		para.put("type", "json");

		/**
		 * 短信模板cid，通过微米后台创建，由在线客服审核。必须设置好短信签名，签名规范： <br>
		 * 1、模板内容一定要带签名，签名放在模板内容的最前面；<br>
		 * 2、签名格式：【***】，签名内容为三个汉字以上（包括三个）；<br>
		 * 3、短信内容不允许双签名，即短信内容里只有一个“【】”<br>
		 */
		para.put("cid", "tpe3fa2Shcbj");

		/**
		 * 传入模板参数。<br>
		 * <br>
		 * 短信模板示例：<br>
		 * 【微米网】您的验证码是：%P%，%P%分钟内有效。如非您本人操作，可忽略本消息。<br>
		 * <br>
		 * 传入两个参数：<br>
		 * p1：610912<br>
		 * p2：3<br>
		 * 最终发送内容：<br>
		 * 【微米网】您的验证码是：610912，3分钟内有效。如非您本人操作，可忽略本消息。
		 */

		List<CjBean> list = kaoshizwService.smsZwList(pici);

		// System.out.println(HttpClientHelper.convertStreamToString(
		// HttpClientHelper.get("http://api.weimi.cc/2/sms/send.html",
		// para), "UTF-8"));
		Map<String, List<CjBean>> map = new HashMap<String, List<CjBean>>();
		for (CjBean cjBean : list) {
			if (map.containsKey(cjBean.getMobile())) {
				map.get(cjBean.getMobile()).add(cjBean);
			} else {
				List<CjBean> cjBeans = new ArrayList<CjBean>();
				cjBeans.add(cjBean);
				map.put(cjBean.getMobile(), cjBeans);
			}

		}
		// 【百花教育】：姓名：%P%，准考证号%P%，你本次考试时间：%P%
		// 科目%P%，考场%P%，试室号%P%，座位号%P%。百花教育教务科
		for (String key : map.keySet()) {
			try {
				boolean flag = true;
				for (CjBean cjBean : map.get(key)) {

					para.put("mob", cjBean.getMobile());
					para.put("xsid", String.valueOf(cjBean.getXsid()));
					if (flag) {
						para.put("p1", cjBean.getName());
						para.put(
								"p2",
								":"
										+ cjBean.getZkz().replace("10086",
												"100-86"));
						para.put("p3", cjBean.getShijian());
						para.put(
								"p4",
								":"
										+ cjBean.getKemu()
												.replace("三个代表", "三个-代表")
												.replace("主义", "主-义")
												.replace("毛泽东", "毛-泽-东")
												.replace("邓小平", "邓-小-平")
												.replace("10086", "100-86")
												.replace("护法", "护-法")
												.replace("联大", "联-大"));
						para.put("p5", ":" + cjBean.getKaochang() + ",地址:"
								+ cjBean.getDizhi().replace("联大", "联-大"));
						para.put("p6", ":" + cjBean.getShishi());
						para.put("p7", ":" + cjBean.getZuoweihao());
						flag = false;
					} else {
						String s = para.get("p7");
						s += ",[科目:"
								+ cjBean.getKemu().replace("三个代表", "三个-代表")
										.replace("主义", "主-义")
										.replace("毛泽东", "毛-泽-东")
										.replace("邓小平", "邓-小-平")
										.replace("10086", "100-86")
										.replace("护法", "护-法")
										.replace("联大", "联-大") + ",考试时间："
								+ cjBean.getShijian() + ",考场:"
								+ cjBean.getKaochang() + ",地址:"
								+ cjBean.getDizhi().replace("联大", "联-大")
								+ ",试室号:" + cjBean.getShishi() + ",座位号:"
								+ cjBean.getZuoweihao() + "]";
						para.put("p7", s);
					}

				}
				
				String result = HttpClientHelper.convertStreamToString(
						HttpClientHelper.post(
								"http://api.weimi.cc/2/sms/send.html", para),
						"UTF-8");
				kaoshizwService.updateSmsZwList(new Kaoshizw("1", pici, result,
						Integer.valueOf(para.get("xsid"))));
				logger.info(para.get("xsid") + "_" + para.get("p1") + "#"
						+ result);
			} catch (Exception e) {
				e.printStackTrace();
				logger.error(e.getMessage());
				continue;
			}

		}
		list = kaoshizwService.smsZwList(pici);
		if (list.size()>0) {
			return new Result(true,"还有"+list.size()+"个学生没有发送座位，请再次点击发送");
		}
		return new Result(true);

	}

	/**
	 * 短信接口二，触发类模板短信接口，可以设置动态参数变量。适合：验证码、订单短信等。
	 */
	@RequestMapping(value = "/cj", method = { RequestMethod.GET,
			RequestMethod.POST })
	public @ResponseBody
	Result cj(String pici) {
		if (StringUtils.isNoneBlank(pici)) {
			pici = pici.trim();
		}else {
			return new Result(false, "批次不能为空");
		}
		Map<String, String> para = new HashMap<String, String>();

		/**
		 * 目标手机号码，多个以“,”分隔，一次性调用最多100个号码，示例：139********,138********
		 */

		/**
		 * 微米账号的接口UID
		 */
		para.put("uid", "t8LomflOl5TU");

		/**
		 * 微米账号的接口密码
		 */
		para.put("pas", "ve5wj3k9");

		/**
		 * 接口返回类型：json、xml、txt。默认值为txt
		 */
		para.put("type", "json");

		/**
		 * 短信模板cid，通过微米后台创建，由在线客服审核。必须设置好短信签名，签名规范： <br>
		 * 1、模板内容一定要带签名，签名放在模板内容的最前面；<br>
		 * 2、签名格式：【***】，签名内容为三个汉字以上（包括三个）；<br>
		 * 3、短信内容不允许双签名，即短信内容里只有一个“【】”<br>
		 */
		para.put("cid", "RtpLL8bRpqzu");

		/**
		 * 传入模板参数。<br>
		 * <br>
		 * 短信模板示例：<br>
		 * 【微米网】您的验证码是：%P%，%P%分钟内有效。如非您本人操作，可忽略本消息。<br>
		 * <br>
		 * 传入两个参数：<br>
		 * p1：610912<br>
		 * p2：3<br>
		 * 最终发送内容：<br>
		 * 【微米网】您的验证码是：610912，3分钟内有效。如非您本人操作，可忽略本消息。
		 */

		List<CjBean> list = kaoshicjService.smsCjList(pici);

		// System.out.println(HttpClientHelper.convertStreamToString(
		// HttpClientHelper.get("http://api.weimi.cc/2/sms/send.html",
		// para), "UTF-8"));
		Map<String, List<CjBean>> map = new HashMap<String, List<CjBean>>();
		for (CjBean cjBean : list) {
			if (map.containsKey(cjBean.getMobile())) {
				map.get(cjBean.getMobile()).add(cjBean);
			} else {
				List<CjBean> cjBeans = new ArrayList<CjBean>();
				cjBeans.add(cjBean);
				map.put(cjBean.getMobile(), cjBeans);
			}

		}
		// 【百花教育】：姓名：%P%，准考证号%P%，你本次考试成绩： 科目%P%，成绩%P%，百花教育教务科
		for (String key : map.keySet()) {
			try {
				boolean flag = true;
				for (CjBean cjBean : map.get(key)) {

					para.put("mob", cjBean.getMobile());
					para.put("xsid", String.valueOf(cjBean.getXsid()));
					if (flag) {
						para.put("p1", cjBean.getName());
						para.put(
								"p2",
								":"
										+ cjBean.getZkz().replace("10086",
												"100-86"));

						para.put(
								"p3",
								":["
										+ cjBean.getKemu()
												.replace("三个代表", "三个-代表")
												.replace("主义", "主-义")
												.replace("毛泽东", "毛-泽-东")
												.replace("邓小平", "邓-小-平")
												.replace("10086", "100-86")
												.replace("护法", "护-法")
												.replace("联大", "联-大"));
						para.put("p4",":"+ cjBean.getCjfs()+"]");
						flag = false;
					} else {
						String s = para.get("p4");
						s += ",[科目:"
								+ cjBean.getKemu().replace("三个代表", "三个-代表")
										.replace("主义", "主-义")
										.replace("毛泽东", "毛-泽-东")
										.replace("邓小平", "邓-小-平")
										.replace("10086", "100-86")
										.replace("护法", "护-法")
										.replace("联大", "联-大") + ",成绩："
								+ cjBean.getCjfs() + "]";
						para.put("p4", s);
					}

				}
				System.out.println(para);
				String result = HttpClientHelper.convertStreamToString(
						HttpClientHelper.post(
								"http://api.weimi.cc/2/sms/send.html", para),
						"UTF-8");
				KaoshicjDto dto = new KaoshicjDto();
				dto.setIsSend("1");
				dto.setIsSendReason(result);
				dto.setXsid(Integer.valueOf(para.get("xsid")));
				dto.setPici(pici);
				kaoshicjService.updateSmsCjList(dto);
				// logger.info(para.get("xsid") + "_" + para.get("p1") + "#"
				// + result);
			} catch (Exception e) {
				e.printStackTrace();
				logger.error(e.getMessage());
				continue;
			}

		}
		list = kaoshicjService.smsCjList(pici);
		if (list.size()>0) {
			return new Result(true,"还有"+list.size()+"个学生没有发送成绩，请再次点击发送");
		}
		return new Result(true);

	}

	static Logger logger = Logger.getLogger("Client");
}
